package com.tr.lambda;

/**
 * @author TRasdzz
 * @since 2021/3/10 12:36
 * @version version-1.0
 */
public class TestLambda02 {
    public static void main(String[] args) {
        ILove1 love1 = null;
        ILove2 love2 = null;

        //1.原始lambda表达式代码
        love1 = (int a) -> {
            System.out.println("I love you" + a);
        };
        love2 = (int a,String b) ->{
            System.out.println("I love you" + a + b);
        };

        //2.简化属性
        love1 = (a) -> {
            System.out.println("I love you" + a);
        };
        love2 = (a,b) ->{
            System.out.println("I love you" + a + b);
        };

        //3.简化括号
        love1 = a -> {
            System.out.println("I love you" + a);
            System.out.println("哈哈哈哈");
        };

        //4.简化方法体

        love1 = b -> System.out.println("I love you" + b);

        /*
        总结：
        lambda表达式只能再有一行有用代码的情况下才能简化为一行，如果有多行，那么就用代码块包裹。
        前提是接口为函数式接口 即接口中只有一个抽象方法
        多个参数也可以去掉参数类型，要去掉就都去掉，必须加上括号
        lambda表达式是通过等号定义的对象类型来确定接口的
         */

        love1.love(520);
        love2.love(520,"zzz");
    }
}

interface ILove1 {
    void love(int a);
}

interface ILove2{
    void love(int a,String b);
}

//I love you520
//I love you520zzz